Table of contents:

  1. Data source
  2. Preprocessing
  3. Data Analysis
  4. Overall view and Foundings
  5. Interpretation and Suggestion

Data source

Suicide data. (2020). from https://www.who.int/teams/mental-health-and-substance-use/suicide-data

References

Importing Data and Libraries

library(readr)
library(dplyr)

Attaching package: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
library(ggplot2)
library(plotly)

Attaching package: 'plotly'
The following object is masked from 'package:ggplot2':

    last_plot
The following object is masked from 'package:stats':

    filter
The following object is masked from 'package:graphics':

    layout
suicideData <- read_csv("/Users/glameveline/RProjects/Fianl project/suicideData.csv")
Parsed with column specification:
cols(
  country = col_character(),
  year = col_double(),
  sex = col_character(),
  age = col_character(),
  suicides_no = col_double(),
  population = col_double()
)
head(suicideData)

Preprocessing

Dealling with missing values

summary(suicideData)
   country               year          sex                age           
 Length:3492        Min.   :1995   Length:3492        Length:3492       
 Class :character   1st Qu.:1995   Class :character   Class :character  
 Mode  :character   Median :2005   Mode  :character   Mode  :character  
                    Mean   :2004                                        
                    3rd Qu.:2015                                        
                    Max.   :2015                                        
                                                                        
  suicides_no        population      
 Min.   :    0.0   Min.   :     279  
 1st Qu.:    1.0   1st Qu.:   71165  
 Median :   14.0   Median :  387728  
 Mean   :  205.4   Mean   : 1775099  
 3rd Qu.:   95.0   3rd Qu.: 1371678  
 Max.   :21706.0   Max.   :43509335  
 NA's   :120       NA's   :396       

Found missing values in suicides_no and population

table(is.na(suicideData$suicides_no))

FALSE  TRUE 
 3372   120 
table(is.na(suicideData$population))

FALSE  TRUE 
 3096   396 

Data analysis

- Rate of suicide per 100k in 1995, 2005 and 2015

suicide_year <- suicideData %>%
  filter(!is.na(population) & !is.na(suicides_no)) %>%
  select(year,suicides_no,population) %>%
  group_by(year) %>%
  summarise(suicide_ratio=round((sum(suicides_no)/sum(population))*100000,2))
`summarise()` ungrouping output (override with `.groups` argument)
suicide_year
ggplot(data=suicide_year,aes(x=year,y=suicide_ratio))+geom_line()+
  geom_point(colour = "red") +
  geom_text(aes(label = suicide_ratio, vjust =-2, hjust =0.5))+
  ylim(0,20)+
  labs(
    title = "World suicide rate trend over 20 years",
    subtitle = "1995,2005 and 2005",
    y = "Suicide Rate per 100K")

- suicide rate by age group from 1995 to 2015

suicide_age <-  suicideData %>%
  filter(!is.na(population) & !is.na(suicides_no)) %>%
  select(year,age,suicides_no,population) %>%
  group_by(age,year) %>%
  summarise(suicide_ratio=round((sum(suicides_no)/sum(population))*100000,2))
`summarise()` regrouping output by 'age' (override with `.groups` argument)
suicide_age
ggplot(data=suicide_age,aes(x=year,y=suicide_ratio, group=age,color=age))+
  geom_line()+
  geom_point()+
        geom_text(aes(label = suicide_ratio, vjust =-2, hjust =0.5))+
  ggtitle("World suicide rate by age group in the previous 20 years")+
  labs(
    y="Suicide Rate per 100K"
  )

- Top 10 suicide rate regions in 2015

# top 10 per 100 k by region(country) in 2015
top10_suicide_country <- suicideData %>%
  filter(!is.na(population) & !is.na(suicides_no) & year=='2015') %>%
  select(country,suicides_no,population) %>%
  group_by(country) %>%
  summarise(suicide_ratio=round((sum(suicides_no)/sum(population))*100000,2)) %>%
  arrange(desc(suicide_ratio)) %>%
  head(10)
`summarise()` ungrouping output (override with `.groups` argument)
top10_suicide_country
plot_ly(data = top10_suicide_country,x=~reorder(country,-suicide_ratio),y=~suicide_ratio,type ='bar',color=top10_suicide_country$country,colors=c('Paired')) %>%
  layout(title='World Top10 suicide commited regions in 2015',
         yaxis=list(title='Suicide rate per 100K'),xaxis=list(title='Country'))
Warning: `arrange_()` is deprecated as of dplyr 0.7.0.
Please use `arrange()` instead.
See vignette('programming') for more help
This warning is displayed once every 8 hours.
Call `lifecycle::last_warnings()` to see where this warning was generated.

- Choropleth map of suicide rate in the year of 2015

# Choropleth map of suicide rate in the year of 2015

suicide_country <- suicideData %>%
  filter(!is.na(population) & !is.na(suicides_no) & year=='2015') %>%
  select(country,suicides_no,population) %>%
  group_by(country) %>%
  summarise(suicide_ratio=round((sum(suicides_no)/sum(population))*100000,2))
`summarise()` ungrouping output (override with `.groups` argument)
suicide_country <- rename(suicide_country,region=country)

# importing world map
world_map <- map_data('world')
str(world_map)
'data.frame':   99338 obs. of  6 variables:
 $ long     : num  -69.9 -69.9 -69.9 -70 -70.1 ...
 $ lat      : num  12.5 12.4 12.4 12.5 12.5 ...
 $ group    : num  1 1 1 1 1 1 1 1 1 1 ...
 $ order    : int  1 2 3 4 5 6 7 8 9 10 ...
 $ region   : chr  "Aruba" "Aruba" "Aruba" "Aruba" ...
 $ subregion: chr  NA NA NA NA ...
# changing names of certain countries
world_map$region <- ifelse(world_map$region=='USA',"United States of America",world_map$region)
head(world_map,n=20)
# suicide map
world_suicide <- left_join(world_map,suicide_country,by='region')
head(world_suicide)
# vidualization
arrange(world_suicide, order) %>%
  ggplot(aes(long, lat, group = group, fill =suicide_ratio)) +
  geom_polygon() +
  xlim(-110,150)+ylim(-20,90)+
  coord_map("polyconic") +
  theme(panel.grid =element_blank())+
  scale_fill_continuous(low = "green", high = "red")+
  labs(
    y='',
    x=''
  )

- World suicide rate per 100K by gender

suicide_gender <- suicideData %>%
  filter(!is.na(population) & !is.na(suicides_no)) %>%
  select(sex,year,suicides_no,population) %>%
  group_by(sex,year) %>%
  summarise(suicide_ratio=round((sum(suicides_no)/sum(population))*100000,2))
`summarise()` regrouping output by 'sex' (override with `.groups` argument)
suicide_gender
# vidualization
plot_ly(data = suicide_gender,x=~year,y=~suicide_ratio,type ='bar',color=suicide_gender$sex,colors=c('Paired')) %>%
  layout(title='World suicide rate per 100K by gender',
         yaxis=list(title='Suicide rate per 100K'))

Overview of world suicide rate and founding

  • Downward trend from 1995 to 2015

  • Age group of people over 75 years old is the group which committed suicide the most over 20 years.

  • Top 10 regions with the highest suicide rate in 2015: Lithuania, South Korea, Slovenia, Latvia, Hungary, Uruguay, Japan, Ukraine, Russia, Croatia.

  • More male die from suicide than women.

Interpretation and reasonings

Why more male die from suicide than women?

*This is also known as the gender paradox in suicide.

  • Suicide attempts are between two and four times more frequent among females.

  • Researchers have partly attributed the difference between attempted and completed suicides among the sexes to males using more lethal means to end their lives.

Why most of countries in top10 suicide rate are in East Europe?
  • Economic crisis after collapse of USSR.
  • Civil war.

Suicide prevention

LS0tCnRpdGxlOiAiV29ybGQgc3VpY2lkZSBhbmFseXNpcyIKYXV0aG9yOiBFdmVsaW5lIFh1IHh1ZWh1aQpkYXRlOiAyMDIwLzEyLzEKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3IgT3V0bGluZX0KYGBgCiMgVGFibGUgb2YgY29udGVudHM6CjEpIERhdGEgc291cmNlCjIpIFByZXByb2Nlc3NpbmcKMykgRGF0YSBBbmFseXNpcwo0KSBPdmVyYWxsIHZpZXcgYW5kIEZvdW5kaW5ncwo1KSBJbnRlcnByZXRhdGlvbiBhbmQgU3VnZ2VzdGlvbgpgYGB7cn0KYGBgCiMgRGF0YSBzb3VyY2UKU3VpY2lkZSBkYXRhLiAoMjAyMCkuIGZyb20gaHR0cHM6Ly93d3cud2hvLmludC90ZWFtcy9tZW50YWwtaGVhbHRoLWFuZC1zdWJzdGFuY2UtdXNlL3N1aWNpZGUtZGF0YQoKIyBSZWZlcmVuY2VzCi0gV29ybGQgSGVhbHRoIE9yZ2FuaXphdGlvbi4gKDIwMTgpLiBTdWljaWRlIHByZXZlbnRpb27vvIxmcm9tIGh0dHA6Ly93d3cud2hvLmludC9tZW50YWxfaGVhbHRoL3N1aWNpZGUtcHJldmVudGlvbi9lbi8KCi0gIkdlbmRlciBEaWZmZXJlbmNlcyBJbiBTdWljaWRlIi4gMjAyMC4gRW4uV2lraXBlZGlhLk9yZy4gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR2VuZGVyX2RpZmZlcmVuY2VzX2luX3N1aWNpZGUjOn46dGV4dD1HbG9iYWxseSUyQyUyMGRlYXRoJTIwYnklMjBzdWljaWRlJTIwb2NjdXJyZWQsb3ZlciUyMHRoZSUyMGFnZSUyMG9mJTIwNjUuCgpgYGB7cn0KYGBgCiMjIyBJbXBvcnRpbmcgRGF0YSBhbmQgTGlicmFyaWVzCmBgYHtyfQpsaWJyYXJ5KHJlYWRyKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkocGxvdGx5KQpzdWljaWRlRGF0YSA8LSByZWFkX2NzdigiL1VzZXJzL2dsYW1ldmVsaW5lL1JQcm9qZWN0cy9GaWFubCBwcm9qZWN0L3N1aWNpZGVEYXRhLmNzdiIpCmhlYWQoc3VpY2lkZURhdGEpCmBgYApgYGB7ciBtZH0KYGBgCiMgUHJlcHJvY2Vzc2luZwojIyMgRGVhbGxpbmcgd2l0aCBtaXNzaW5nIHZhbHVlcwpgYGB7cn0Kc3VtbWFyeShzdWljaWRlRGF0YSkKYGBgCkZvdW5kIG1pc3NpbmcgdmFsdWVzIGluIHN1aWNpZGVzX25vIGFuZCBwb3B1bGF0aW9uCmBgYHtyfQp0YWJsZShpcy5uYShzdWljaWRlRGF0YSRzdWljaWRlc19ubykpCnRhYmxlKGlzLm5hKHN1aWNpZGVEYXRhJHBvcHVsYXRpb24pKQpgYGAKIyMgRGF0YSBhbmFseXNpcwojIyMjIC0gUmF0ZSBvZiBzdWljaWRlIHBlciAxMDBrIGluIDE5OTUsIDIwMDUgYW5kIDIwMTUKYGBge3IgYnkgeWVhciBsaW5lfQpzdWljaWRlX3llYXIgPC0gc3VpY2lkZURhdGEgJT4lCiAgZmlsdGVyKCFpcy5uYShwb3B1bGF0aW9uKSAmICFpcy5uYShzdWljaWRlc19ubykpICU+JQogIHNlbGVjdCh5ZWFyLHN1aWNpZGVzX25vLHBvcHVsYXRpb24pICU+JQogIGdyb3VwX2J5KHllYXIpICU+JQogIHN1bW1hcmlzZShzdWljaWRlX3JhdGlvPXJvdW5kKChzdW0oc3VpY2lkZXNfbm8pL3N1bShwb3B1bGF0aW9uKSkqMTAwMDAwLDIpKQpzdWljaWRlX3llYXIKYGBgCmBgYHtyIHZpZHVhbGl6YXRpb24xfQpnZ3Bsb3QoZGF0YT1zdWljaWRlX3llYXIsYWVzKHg9eWVhcix5PXN1aWNpZGVfcmF0aW8pKStnZW9tX2xpbmUoKSsKICBnZW9tX3BvaW50KGNvbG91ciA9ICJyZWQiKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHN1aWNpZGVfcmF0aW8sIHZqdXN0ID0tMiwgaGp1c3QgPTAuNSkpKwogIHlsaW0oMCwyMCkrCiAgbGFicygKICAgIHRpdGxlID0gIldvcmxkIHN1aWNpZGUgcmF0ZSB0cmVuZCBvdmVyIDIwIHllYXJzIiwKICAgIHN1YnRpdGxlID0gIjE5OTUsMjAwNSBhbmQgMjAwNSIsCiAgICB5ID0gIlN1aWNpZGUgUmF0ZSBwZXIgMTAwSyIpCmBgYAoKIyMjIyAtIHN1aWNpZGUgcmF0ZSBieSBhZ2UgZ3JvdXAgZnJvbSAxOTk1IHRvIDIwMTUKCmBgYHtyfQpzdWljaWRlX2FnZSA8LSAgc3VpY2lkZURhdGEgJT4lCiAgZmlsdGVyKCFpcy5uYShwb3B1bGF0aW9uKSAmICFpcy5uYShzdWljaWRlc19ubykpICU+JQogIHNlbGVjdCh5ZWFyLGFnZSxzdWljaWRlc19ubyxwb3B1bGF0aW9uKSAlPiUKICBncm91cF9ieShhZ2UseWVhcikgJT4lCiAgc3VtbWFyaXNlKHN1aWNpZGVfcmF0aW89cm91bmQoKHN1bShzdWljaWRlc19ubykvc3VtKHBvcHVsYXRpb24pKSoxMDAwMDAsMikpCgpzdWljaWRlX2FnZQoKCmdncGxvdChkYXRhPXN1aWNpZGVfYWdlLGFlcyh4PXllYXIseT1zdWljaWRlX3JhdGlvLCBncm91cD1hZ2UsY29sb3I9YWdlKSkrCiAgZ2VvbV9saW5lKCkrCiAgZ2VvbV9wb2ludCgpKwogICAgICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSBzdWljaWRlX3JhdGlvLCB2anVzdCA9LTIsIGhqdXN0ID0wLjUpKSsKICBnZ3RpdGxlKCJXb3JsZCBzdWljaWRlIHJhdGUgYnkgYWdlIGdyb3VwIGluIHRoZSBwcmV2aW91cyAyMCB5ZWFycyIpKwogIGxhYnMoCiAgICB5PSJTdWljaWRlIFJhdGUgcGVyIDEwMEsiCiAgKQpgYGAKCiMjIyMgLSBUb3AgMTAgc3VpY2lkZSByYXRlIHJlZ2lvbnMgaW4gMjAxNQpgYGB7cn0KIyB0b3AgMTAgcGVyIDEwMCBrIGJ5IHJlZ2lvbihjb3VudHJ5KSBpbiAyMDE1CnRvcDEwX3N1aWNpZGVfY291bnRyeSA8LSBzdWljaWRlRGF0YSAlPiUKICBmaWx0ZXIoIWlzLm5hKHBvcHVsYXRpb24pICYgIWlzLm5hKHN1aWNpZGVzX25vKSAmIHllYXI9PScyMDE1JykgJT4lCiAgc2VsZWN0KGNvdW50cnksc3VpY2lkZXNfbm8scG9wdWxhdGlvbikgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgc3VtbWFyaXNlKHN1aWNpZGVfcmF0aW89cm91bmQoKHN1bShzdWljaWRlc19ubykvc3VtKHBvcHVsYXRpb24pKSoxMDAwMDAsMikpICU+JQogIGFycmFuZ2UoZGVzYyhzdWljaWRlX3JhdGlvKSkgJT4lCiAgaGVhZCgxMCkKCnRvcDEwX3N1aWNpZGVfY291bnRyeQoKCnBsb3RfbHkoZGF0YSA9IHRvcDEwX3N1aWNpZGVfY291bnRyeSx4PX5yZW9yZGVyKGNvdW50cnksLXN1aWNpZGVfcmF0aW8pLHk9fnN1aWNpZGVfcmF0aW8sdHlwZSA9J2JhcicsY29sb3I9dG9wMTBfc3VpY2lkZV9jb3VudHJ5JGNvdW50cnksY29sb3JzPWMoJ1BhaXJlZCcpKSAlPiUKICBsYXlvdXQodGl0bGU9J1dvcmxkIFRvcDEwIHN1aWNpZGUgY29tbWl0ZWQgcmVnaW9ucyBpbiAyMDE1JywKICAgICAgICAgeWF4aXM9bGlzdCh0aXRsZT0nU3VpY2lkZSByYXRlIHBlciAxMDBLJykseGF4aXM9bGlzdCh0aXRsZT0nQ291bnRyeScpKQpgYGAKIyMjIyAtIENob3JvcGxldGggbWFwIG9mIHN1aWNpZGUgcmF0ZSBpbiB0aGUgeWVhciBvZiAyMDE1CmBgYHtyfQojIENob3JvcGxldGggbWFwIG9mIHN1aWNpZGUgcmF0ZSBpbiB0aGUgeWVhciBvZiAyMDE1CgpzdWljaWRlX2NvdW50cnkgPC0gc3VpY2lkZURhdGEgJT4lCiAgZmlsdGVyKCFpcy5uYShwb3B1bGF0aW9uKSAmICFpcy5uYShzdWljaWRlc19ubykgJiB5ZWFyPT0nMjAxNScpICU+JQogIHNlbGVjdChjb3VudHJ5LHN1aWNpZGVzX25vLHBvcHVsYXRpb24pICU+JQogIGdyb3VwX2J5KGNvdW50cnkpICU+JQogIHN1bW1hcmlzZShzdWljaWRlX3JhdGlvPXJvdW5kKChzdW0oc3VpY2lkZXNfbm8pL3N1bShwb3B1bGF0aW9uKSkqMTAwMDAwLDIpKQpzdWljaWRlX2NvdW50cnkgPC0gcmVuYW1lKHN1aWNpZGVfY291bnRyeSxyZWdpb249Y291bnRyeSkKCiMgaW1wb3J0aW5nIHdvcmxkIG1hcAp3b3JsZF9tYXAgPC0gbWFwX2RhdGEoJ3dvcmxkJykKc3RyKHdvcmxkX21hcCkKIyBjaGFuZ2luZyBuYW1lcyBvZiBjZXJ0YWluIGNvdW50cmllcwp3b3JsZF9tYXAkcmVnaW9uIDwtIGlmZWxzZSh3b3JsZF9tYXAkcmVnaW9uPT0nVVNBJywiVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIix3b3JsZF9tYXAkcmVnaW9uKQpoZWFkKHdvcmxkX21hcCxuPTIwKQoKIyBzdWljaWRlIG1hcAp3b3JsZF9zdWljaWRlIDwtIGxlZnRfam9pbih3b3JsZF9tYXAsc3VpY2lkZV9jb3VudHJ5LGJ5PSdyZWdpb24nKQpoZWFkKHdvcmxkX3N1aWNpZGUpCgojIHZpZHVhbGl6YXRpb24KYXJyYW5nZSh3b3JsZF9zdWljaWRlLCBvcmRlcikgJT4lCiAgZ2dwbG90KGFlcyhsb25nLCBsYXQsIGdyb3VwID0gZ3JvdXAsIGZpbGwgPXN1aWNpZGVfcmF0aW8pKSArCiAgZ2VvbV9wb2x5Z29uKCkgKwogIHhsaW0oLTExMCwxNTApK3lsaW0oLTIwLDkwKSsKICBjb29yZF9tYXAoInBvbHljb25pYyIpICsKICB0aGVtZShwYW5lbC5ncmlkID1lbGVtZW50X2JsYW5rKCkpKwogIHNjYWxlX2ZpbGxfY29udGludW91cyhsb3cgPSAiZ3JlZW4iLCBoaWdoID0gInJlZCIpKwogIGxhYnMoCiAgICB5PScnLAogICAgeD0nJwogICkKYGBgCiMjIyMgLSBXb3JsZCBzdWljaWRlIHJhdGUgcGVyIDEwMEsgYnkgZ2VuZGVyCmBgYHtyfQpzdWljaWRlX2dlbmRlciA8LSBzdWljaWRlRGF0YSAlPiUKICBmaWx0ZXIoIWlzLm5hKHBvcHVsYXRpb24pICYgIWlzLm5hKHN1aWNpZGVzX25vKSkgJT4lCiAgc2VsZWN0KHNleCx5ZWFyLHN1aWNpZGVzX25vLHBvcHVsYXRpb24pICU+JQogIGdyb3VwX2J5KHNleCx5ZWFyKSAlPiUKICBzdW1tYXJpc2Uoc3VpY2lkZV9yYXRpbz1yb3VuZCgoc3VtKHN1aWNpZGVzX25vKS9zdW0ocG9wdWxhdGlvbikpKjEwMDAwMCwyKSkKc3VpY2lkZV9nZW5kZXIKCiMgdmlkdWFsaXphdGlvbgpwbG90X2x5KGRhdGEgPSBzdWljaWRlX2dlbmRlcix4PX55ZWFyLHk9fnN1aWNpZGVfcmF0aW8sdHlwZSA9J2JhcicsY29sb3I9c3VpY2lkZV9nZW5kZXIkc2V4LGNvbG9ycz1jKCdQYWlyZWQnKSkgJT4lCiAgbGF5b3V0KHRpdGxlPSdXb3JsZCBzdWljaWRlIHJhdGUgcGVyIDEwMEsgYnkgZ2VuZGVyJywKICAgICAgICAgeWF4aXM9bGlzdCh0aXRsZT0nU3VpY2lkZSByYXRlIHBlciAxMDBLJykpCmBgYAojIyMgT3ZlcnZpZXcgb2Ygd29ybGQgc3VpY2lkZSByYXRlIGFuZCBmb3VuZGluZwoqIERvd253YXJkIHRyZW5kIGZyb20gMTk5NSB0byAyMDE1CgoqIEFnZSBncm91cCBvZiBwZW9wbGUgb3ZlciA3NSB5ZWFycyBvbGQgaXMgdGhlIGdyb3VwIHdoaWNoIGNvbW1pdHRlZCBzdWljaWRlIHRoZSBtb3N0IG92ZXIgMjAgeWVhcnMuCgoqIFRvcCAxMCByZWdpb25zIHdpdGggdGhlIGhpZ2hlc3Qgc3VpY2lkZSByYXRlIGluIDIwMTU6IExpdGh1YW5pYSwgU291dGggS29yZWEsIFNsb3ZlbmlhLCBMYXR2aWEsIEh1bmdhcnksIFVydWd1YXksIEphcGFuLCBVa3JhaW5lLCBSdXNzaWEsIENyb2F0aWEuCgoqIE1vcmUgbWFsZSBkaWUgZnJvbSBzdWljaWRlIHRoYW4gd29tZW4uCgojIyMgSW50ZXJwcmV0YXRpb24gYW5kIHJlYXNvbmluZ3MKIyMjIyMgV2h5IG1vcmUgbWFsZSBkaWUgZnJvbSBzdWljaWRlIHRoYW4gd29tZW4/CipUaGlzIGlzIGFsc28ga25vd24gYXMgdGhlIGdlbmRlciBwYXJhZG94IGluIHN1aWNpZGUuCgoqIFN1aWNpZGUgYXR0ZW1wdHPCoGFyZSBiZXR3ZWVuIHR3byBhbmQgZm91ciB0aW1lcyBtb3JlIGZyZXF1ZW50IGFtb25nIGZlbWFsZXMuCgoqIFJlc2VhcmNoZXJzIGhhdmUgcGFydGx5IGF0dHJpYnV0ZWQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhdHRlbXB0ZWQgYW5kIGNvbXBsZXRlZCBzdWljaWRlcyBhbW9uZyB0aGUgc2V4ZXMgdG8gbWFsZXMgdXNpbmcgbW9yZSBsZXRoYWwgbWVhbnMgdG8gZW5kIHRoZWlyIGxpdmVzLgoKIyMjIyMgV2h5IG1vc3Qgb2YgY291bnRyaWVzIGluIHRvcDEwIHN1aWNpZGUgcmF0ZSBhcmUgaW4gRWFzdCBFdXJvcGU/CiogRWNvbm9taWMgY3Jpc2lzIGFmdGVyIGNvbGxhcHNlIG9mIFVTU1IuCiogQ2l2aWwgd2FyLgoKIyMjIFN1aWNpZGUgcHJldmVudGlvbgotIFNlcHRlbWJlciAxMCBoYXMgYmVlbiBvYnNlcnZlZCBhcyAnV29ybGQgU3VpY2lkZSBQcmV2ZW50aW9uIERheScgaW4gcGFydG5lcnNoaXAgd2l0aCB0aGUgSW50ZXJuYXRpb25hbCBBc3NvY2lhdGlvbiBmb3IgU3VpY2lkZSBQcmV2ZW50aW9uIGFuZCB0aGUgV29ybGQgSGVhbHRoIE9yZ2FuaXphdGlvbi4LCgotIFNvdXRoIEtvcmVhIFN1aWNpZGUgSG90bGluZXMKaHR0cDovL3d3dy5zdWljaWRlLm9yZy9ob3RsaW5lcy9pbnRlcm5hdGlvbmFsL3NvdXRoLWtvcmVhLXN1aWNpZGUtaG90bGluZXMuaHRtbAoKLSBUYWxrIHRoZXJhcHkKCi0gU3VpY2lkZSBTdXJ2aXZvcnMgYXJlIEhlcm9lcwoKCgo=